#ifndef __SERVERUI_H__
#define __SERVERUI_H__

#include "netMessage.h"
#include "tcpServer.h"
#include "dataManager.h"
#include <iostream>
#include <list>
#include <string.h>

class ServerUI 
    : public BaseHandle<NewClientMessage>
    , public BaseHandle<ClientDataMessage>
{
public:
    ServerUI(std::string addr, int port);
    ~ServerUI();

    /*
     * UI 主线程
     */
    void run();

public:
    /*
     * 作者：李江军
     * 日期：2022-08-08
     * 
     * 设置边框宽度，当设置宽度超过终端最大宽度时取终端最大宽度
     */
    void setBorderWidth(int w);
    
    /*
     * 作者：李江军
     * 日期：2022-08-08
     * 
     * 设置边框水平字符样式
     */
    void setHorizontalBorderStyle(char c);

    /*
     * 作者：李江军
     * 日期：2022-08-08
     * 
     * 设置边框垂直字符样式
     */
    void setVerticalBorderStyle(char c);
    
    /*
     * 作者：李江军
     * 日期：2022-09-06
     * 
     * 设置信息显示条数，默认 5 条
     */
    void setMessageCount(int count);
    

public:
    // 新客户端信息连接
    virtual bool handle(const NewClientMessage *pMsg);
    virtual bool handle(const ClientDataMessage *pMsg);

private:
    void welcomeUI();

    void addNewMessage(const std::string& msg);

private:
    int                             m_length;                   // 字符串总长度
    int                             m_startPos;                 // 字符串显示起点位置

    char                            m_horizontalBorder;         // 水平边框字符
    char                            m_verticalBorder;           // 垂直边框字符
    std::string                     m_borderStyle;              // 外边框字符样式

    std::string                     m_addr;
    int                             m_port;
    TcpServer                       m_tcpServer;

    DataManager                     m_dataManager;

    int                             m_clientCount;              // 当前客户端在线总数量
    int                             m_msgCount;                 // 信息显示数量
    std::list<std::string>          m_msgs;                     // 信息列表
};

#endif // __SERVERUI_H__